//----BEGIN LICENSE----//
/*****************************************************************\
** prevalentLite - sqlite3 persistence object library 
**
** Copyright (C) 2008 Philip R. Schuchardt
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program.  If not, see <http://www.gnu.org/licenses/>.
**
*****************************************************************/
//----END LICENSE----//
#ifndef pl_FACTORY_H
#define pl_FACTORY_H

//Std includes
#include <map>
#include <string>

//Our includes
#include "plFactoryElement.h"
class plObject;

class plFactory {

public:

    //Constructor
    plFactory();

    /*
        //Creates a new object based on the className
        template <class T>
        T* New(const char* className) {
                plFactoryElement* element = Lookup[className];
                return (T*)(element->NewFunctionPtr)();
        }
        */

    //Creats a new object based on the className
    plObject* New(const char* className);

private:

    //Lookups object's book keeping so we can create objects by a string
    static std::map<std::string, plFactoryElement*> Lookup;

    //Populates the Lookup map
    void PopulateMap();
}; //end plFactory


#endif //pl_FACTORY_H

